/**
 * 通用JS工具
 */
/**
 * 序列化表单对象
 */
function serializeForm($form){
	// 遍历表单下的所有input组件，去除文本框的'disabled'属性，如果有的话
	$form.find('input').each(function(){
		$(this).removeAttr('disabled');
	});
	
	// 遍历表单下的所有combo组件，若其value属性未定义，则手动添加隐藏域
	$form.find('.combo-f').each(function(){
		if(typeof($(this).combo('getValue'))=='undefined'){
			$(this).next('span').append('<input name="' + $(this).attr('comboname') + '" type="hidden">');
		}
	});
	
	var form=$form.form();
	var o = {};
	$.each(form.serializeArray(), function(index) {
		if (o[this['name']]) {
			o[this['name']] = o[this['name']] + "," + this['value'];
		} else {
			o[this['name']] = this['value'];
		}
	});
	return o;
}

// 扩展表格功能：使得能够直接编辑单元格
$.extend($.fn.datagrid.methods, {
	editCell: function(jq,param){
		return jq.each(function(){
			var fields = $(this).datagrid('getColumnFields',true).concat($(this).datagrid('getColumnFields'));
			for(var i=0; i<fields.length; i++){
				var col = $(this).datagrid('getColumnOption', fields[i]);
				col.editor1 = col.editor;
				if (fields[i] != param.field){
					col.editor = null;
				}
			}
			$(this).datagrid('beginEdit', param.index);
            var ed = $(this).datagrid('getEditor', param);
            if (ed){
                if ($(ed.target).hasClass('textbox-f')){
                    $(ed.target).textbox('textbox').focus();
                } else {
                    $(ed.target).focus();
                }
            }
			for(var i=0; i<fields.length; i++){
				var col = $(this).datagrid('getColumnOption', fields[i]);
				col.editor = col.editor1;
			}
		});
	},
    enableCellEditing: function(jq){
        return jq.each(function(){
            var dg = $(this);
            var opts = dg.datagrid('options');
            opts.oldOnClickCell = opts.onClickCell;
            opts.onClickCell = function(index, field){
                if (opts.editIndex != undefined){
                    if (dg.datagrid('validateRow', opts.editIndex)){
                        dg.datagrid('endEdit', opts.editIndex);
                        opts.editIndex = undefined;
                    } else {
                        return;
                    }
                }
                dg.datagrid('selectRow', index).datagrid('editCell', {
                    index: index,
                    field: field
                });
                opts.editIndex = index;
                opts.oldOnClickCell.call(this, index, field);
            };
        });
    }
});

// 扩展表单验证规则
$.extend($.fn.validatebox.defaults.rules, {
	/**字母，下划线，$开头的英文、数字、$、_组合*/
	variable:{
		validator : function(value, param){
			return /^[A-Za-z_$][A-Za-z0-9_$]{0,126}$/gi.test(value);
		},
		message : "请输入正确的命名规则：非数字开头的字母/数字/ _/$/的组合"
	},
	/**校验座机号码*/
	phone:{
		validator : function(value, param){
			return /^((\+86|86)\d{0,11}|(\d{0,11})|(\d{3,4})-(\d{0,8})|(\d{3,4})-(\d{0,8})-(\d{1,4})|(\d{7,8})-(\d{1,4}))$/gi.test(value);
		},
		message : '请输入正确的号码！'
	},
	/**校验整数*/
    integer:{
		validator : function(value, param){
			return /^[1-9]\d*$/gi.test(value) && value.length <= param[0];
		},
		message : '请输入{0}位以下的整数！'
	},
	english : {
		validator : function(value, param) {
			return /^[0-9a-zA-Z\.\_]*$/gi.test(value) && value.length <= param
					&& value.length > 0;
		},
		message : '请输入{0}位以内的英文字母数字'
	},
	englishNo : {
		validator : function(value, param) {
			return /^[0-9a-zA-Z]+$/gi.test(value) && value.length <= param
			&& value.length > 0;
		},
		message : '不合法输入'
	},
	/**定长的字母数字**/
	englishNoFix : {
		validator : function(value, param) {
			return /^[0-9a-zA-Z]+$/gi.test(value) && value.length == param;
		},
		message : '不合法输入'
	},
	validateExc : {
		validator : function(value, param) {
			return  /^[\u4E00-\u9FA5a-zA-Z0-9\_\(\)\（\）]+$/gi.test(value) && value.length <= param
					&& value.length > 0;
		},
		message : '请输入{0}位以内由汉字英文字母数字下划线组成的字符'
	},
	validateVer : {
		validator : function(value, param) {
			return  /^[0-9a-zA-Z]{2}\.[0-9a-zA-Z]{2}$/gi.test(value) && value.length <= param
					&& value.length > 0;
		},
		message : '不合法输入'
	},
	validateAppVer : {
		validator : function(value, param) {
			return  /^[0-9a-zA-Z]{2}\.[0-9a-zA-Z]{2}\.[0-9a-zA-Z]{2}$/gi.test(value) && value.length <= param
					&& value.length > 0;
		},
		message : '不合法输入'
	},
	englishpwd : {
		validator : function(value, param) {
			return /^[0-9a-zA-Z]*$/gi.test(value) && value.length <= param
					&& value.length > 5;
		},
		message : '不合法输入'
	},
	maxleng : {
		validator : function(value, param) {
			return value.length <= param;
		},
		message : '请输入{0}位以内的名称'
	},
	number:{
		validator : function(value, param) {
			return /^[0-9]{0}([0-9]|[.])+$/gi.test(value) && value.length <= param
					&& value.length > 0;
		},
		message : '不合法输入'
	},
	/** 添加验证两次密码功能 */
	eqPwd : {
		validator : function(value, param) {
			// alert("value"+value+"param"+param);
			return value == $(param[0]).val();
		},
		message : '密码不一致！'
	}
});

// 从服务器重新载入数据
function reload(fun){
	fun();
}

// 关闭指定对话框
function closeDialog(dialogId){
	$('#'+dialogId).dialog('close');
}

// 打开指定对话框
function openDialog(dialogId, title){
	$('#'+dialogId).dialog('open').dialog('setTitle', title);
}

// 设置链接按钮为可用
function enableLinkBtn($button){
	$button.linkbutton('enable');
}

// 设置链接按钮为不可用
function disableLinkBtn($button){
	$button.linkbutton('disable');
}

// 清空表格选择
function clearSelections(gridId){
	$('#'+gridId).datagrid('clearSelections');
}

//清空表格的值到原来的样子
function reject(gridId){
	$('#' + gridId).datagrid('rejectChanges');
	editIndex = undefined;
}

// 结束表格的编辑
function endEdit(gridId, callback){
	// 获取总行数
	var total = $('#' + gridId).datagrid('getData').total;
	for(var i = 0; i < total; i++){
		$('#' + gridId).datagrid('endEdit', i);
	}
	if(callback){
		callback();
	}
}
